package command

import (
	"flag"
	"fmt"
	"gitee.com/huanminabc/go-utils/file"
	"gitee.com/huanminabc/go-utils/vars"
	"go-LineScriptCommand/plan"
	"runtime/debug"
)

type FileCodeCmd struct {
	doc      string //接收输入变量
	priority int    //优先级
}

func init() {
	RegisterCommand(&FileCodeCmd{
		priority: 1,
	})
}

// 绑定
func (m *FileCodeCmd) Bind() {
	flag.StringVar(&m.doc, m.GetName(), "", m.GetDesc())
}

// 满足条件才执行命令
func (m *FileCodeCmd) Condition() bool {
	return m.doc != ""
}

// 获取命令名称
func (m *FileCodeCmd) GetName() string {
	return "f"
}

// 获取命令描述
func (m *FileCodeCmd) GetDesc() string {
	return "执行.flow脚本文件 -f ./test.flow "
}

// 优先级  ,0最低...
func (m *FileCodeCmd) GetPriority() int {
	return m.priority
}

// 是否终止
func (m *FileCodeCmd) IsExit() bool {
	return true
}

// 执行命令
func (m *FileCodeCmd) Execute() {
	defer func() {
		if err := recover(); err != nil {
			errorMess := fmt.Sprintf("%s", err)
			fmt.Println(vars.RedColor("错误: " + errorMess))
			debug.PrintStack() // 打印堆栈信息
		}
	}()
	//判断是否存在
	if !file.IsExist(m.doc) {
		panic(m.doc + "文件不存在")
	}
	//判断后缀是.flow
	if file.GetFileSuffix(m.doc) != ".flow" {
		panic(m.doc + "文件不是.flow文件")
	}
	//读取文件
	codes := file.ReadFileLine(m.doc)
	plan.LinePlan(codes)
}
